home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / shareware / wreckage / source / assembly / asm_3d.asm < prev    next >
Assembly Source File  |  1999-02-08  |  2KB  |  159 lines

  1. ;    a0     &ox
  2. ;    a3    &oapp
  3. ;    a4    &sincache
  4. ;    d0    templong
  5. ;    sincache(0)=cvaz*32767
  6. ;    sincche(1)=svaz*32767
  7. ;    sincache(2)=cvax*32767
  8. ;    sincache(3)=svax*32767
  9. ;    sincache(4)=cvay*32767
  10. ;    sincache(5)=svay*32767
  11.  
  12.         ;A5-A7 MUST NOT BE TRASHED!!!
  13.  
  14.     MOVE.l    a6    ,-(a7)    ;PUSH a5
  15.     MOVE.l    d1    ,a6    ;load new value
  16.  
  17. _rot_loop1:
  18.  
  19.     MOVE.b     (a3)+    ,d1    ;oapp
  20.       BEQ     _hide_point2    ;(oapp=0)=> skip point
  21.  
  22.  
  23. ;Main Code :)
  24. ;--------
  25.  
  26.     MOVE.w    (a4)    ,d6    ;get cos
  27.     MOVE.w    2(a4)    ,d7    ;get sin
  28.  
  29.       MOVE.l     (a0)+    ,d1    ;d1=ox(n)
  30.      CLR.w     d1
  31.       SWAP     d1
  32.  
  33.       MOVE.w     d1    ,d2    ;d2=x
  34.       MULS.w     d6    ,d1    ;x*csa
  35.  
  36.       MULS.w     d7    ,d2    ;x*sna
  37.  
  38.  
  39.       MOVE.l     (a0)+    ,d3    ;oy(n)
  40.       CLR.w     d3
  41.       SWAP     d3
  42.  
  43.       MOVE.w     d3    ,d4    ;y
  44.  
  45.       MULS.w     d7    ,d3    ;y*sna
  46.       SUB.l     d3    ,d1    ;x*csa-y*sna
  47.  
  48.       MULS.w     d6    ,d4    ;y*csa
  49.       ADD.l     d2    ,d4    ;y*csa+x*sna
  50.  
  51.  
  52.  
  53.     ;d4 holds Y
  54.     ;d1 holds X
  55.  
  56.  
  57. _rot_loop2:
  58. ;      yy=y*cvax-z*svax    
  59. ;      zz=z*cvax+y*svax
  60.  
  61.     MOVE.w    4(a4)    ,d6    ;get cos
  62.     MOVE.w    6(a4)    ,d7    ;get sin
  63.  
  64.       MOVE.l     (a0)+    ,d5    ;d2=oz(n)
  65.      CLR.w     d5
  66.       SWAP     d5
  67.  
  68.       MOVE.w     d5    ,d2    ;d2=z
  69.  
  70.       MULS.w     d6    ,d5    ;z*csa
  71.       MULS.w     d7    ,d2    ;z*sna
  72.  
  73.     CLR.w    d4
  74.     SWAP    d4
  75.       MOVE.w     d4    ,d3    ;y is still here
  76.                 ;   <grin>
  77.  
  78.       MULS.w     d6    ,d3    ;y*csa
  79.       SUB.l     d2    ,d3    ;yy=y*csa-z*sna
  80.  
  81.       MULS.w     d7    ,d4    ;y*sna
  82.       ADD.l     d5    ,d4    ;zz=z*csa+y*sna
  83.  
  84. ;    X    D1
  85. ;    Z    D4
  86. ;    Y    D3 (do not trash)
  87. ;        -----------------
  88.  
  89. _rot_loop3:
  90. ;      xx=x*cvay-z*svay
  91. ;      zz=z*cvay+x*svay
  92.  
  93.     MOVE.w    8(a4)    ,d6    ;get cos
  94.     MOVE.w    10(a4)    ,d7    ;get sin
  95.  
  96.     CLR.W    d4
  97.     SWAP    d4
  98.       MOVE.w     d4    ,d2    ;d2=z (yes, it is still here)
  99.  
  100.       MULS.w     d6    ,d4    ;z*csa
  101.       MULS.w     d7    ,d2    ;z*sna
  102.  
  103.     CLR.w    d1
  104.     SWAP    d1
  105.  
  106.       MOVE.w     d1    ,d5    ;x is still here                ;   (I hope)
  107.       MULS.w     d6    ,d1    ;x*csa
  108.       SUB.l     d2    ,d1    ;xx=x*csa-z*sna
  109.  
  110.       MULS.w     d7    ,d5    ;x*sna
  111.       ADD.l     d4    ,d5    ;zz=z*csa+x*sna
  112.  
  113. ;    X    D1
  114. ;    Y    D3
  115. ;    Z    D5
  116.  
  117.  
  118. ;    And do the 2d->3d Projection
  119.  
  120.  
  121.     CLR.w    d3        ;d3 IS a longword..
  122.     SWAP    d3        ;but I am shifting it twice..
  123.     EXT.l    d3        ;yeah
  124.     TST.l     d3
  125.     BLE     _hide_point
  126.     
  127.     DIVS.l    d3    ,d1    ;this is x
  128.     ASR.l    #8    ,d1
  129.     ASR.l    #1    ,d1
  130.     ADD.w    #160    ,d1
  131.  
  132.     DIVS.l    d3    ,d5    ;and this is z
  133.     ASR.l    #8    ,d5
  134.     ASR.l    #1    ,d5
  135.     ADD.l    #80    ,d5
  136.  
  137.     MOVE.w    #1    ,d7    ;display point!!
  138.     BRA    _loop_ending
  139.     
  140.         
  141. _hide_point2:
  142.     ADDQ.l    #6    ,a0
  143.     ADDQ.l    #6    ,a0
  144.  
  145. _hide_point:
  146.     CLR.w d7
  147.  
  148.  
  149. _loop_ending:
  150.     MOVE.w     d1    ,(a6)+    ;sx
  151.      MOVE.w     d5    ,(a6)+        ;sy
  152.       MOVE.w     d7    ,(a6)+        ;app
  153.  
  154.       SUBQ.l    #1    ,d0    ;n=n-1
  155.       BGT     _rot_loop1
  156.  
  157.  
  158.     MOVE.l    (a7)+    ,a6    ;POP A5
  159.